<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

//同步通知和异步通知处理控制器
class Paynotice extends Home_Controller{

	public function __construct(){
		parent::__construct();
        $this->load->library('pay');
        $this->load->model('goods_model');
        $this->load->model('orders_model');

	}
    //同步通知
    public function return_url(){
        $verify_result = $this->pay->verifyReturn();
        if($verify_result) {//验证成功
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            //请在这里加上商户的业务逻辑程序代码

            //——请根据您的业务逻辑来编写程序（以下代码仅作参考）——
            //获取支付宝的通知返回参数，可参考技术文档中页面跳转同步通知参数列表

            //商户订单号
            $out_trade_no = $_GET['out_trade_no'];

            //支付宝交易号
            $trade_no = $_GET['trade_no'];

            //交易状态
            $trade_status = $_GET['trade_status'];


            if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {
                //判断该笔订单是否在商户网站中已经做过处理
                //如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
                //如果有做过处理，不执行商户的业务程序
                //先查询我们网站订单的状态
                $order = $this->orders_model->get_order_tradeno($out_trade_no);
                //只有当状态是未付款时，才修改支付状态
                if($order['pay_status']==0){
                    $id = $order['id'];
                    $data['pay_status'] = 1;
                    $data['pay_trade_no'] = $trade_no;
                    if($this->orders_model->update_order($data,$id)){
                        echo '订单成功';
                    }else{
                        echo('修改订单状态失败<br>');
                    }

                    /*if(!$result){
                        echo('修改订单状态失败<br>');
                    }else{
                        echo "<a target='_blank' href='../show_order.php?trade_no={$out_trade_no}'>查看订单</a>";
                    }*/
                }
            }
            else {
                echo "trade_status=".$_GET['trade_status'];
            }

            echo "验证成功<br />";

            //——请根据您的业务逻辑来编写程序（以上代码仅作参考）——

            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        }
        else {
            //验证失败
            //如要调试，请看alipay_notify.php页面的verifyReturn函数
            echo "验证失败";
        }

    }

    //异步通知
    public function notify_url(){
        $verify_result = $this->pay->verifyNotify();
        if($verify_result) {//验证成功
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            //请在这里加上商户的业务逻辑程序代


            //——请根据您的业务逻辑来编写程序（以下代码仅作参考）——

            //获取支付宝的通知返回参数，可参考技术文档中服务器异步通知参数列表

            //商户订单号
            $out_trade_no = $_POST['out_trade_no'];

            //支付宝交易号
            $trade_no = $_POST['trade_no'];

            //交易状态
            $trade_status = $_POST['trade_status'];

            //写日志
            $logdata['content'] = "收到异步通知|订单号$out_trade_no|支付宝交易号$trade_no|交易状态$trade_status";
            $logdata['ctime'] = time();
            $this->orders_model->add_logs($logdata);
            //同步支付宝的交易状态
            $order = $this->orders_model->get_order_tradeno($out_trade_no);
            if(!empty($order)){
                $id = $order['id'];
                $orderdata['trade_status'] = $trade_status;
                $this->orders_model->update_order($orderdata,$id);
            }

            if($_POST['trade_status'] == 'TRADE_FINISHED') {
                //判断该笔订单是否在商户网站中已经做过处理
                //如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
                //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
                //如果有做过处理，不执行商户的业务程序

                //注意：
                //退款日期超过可退款期限后（如三个月可退款），支付宝系统发送该交易状态通知

                //调试用，写文本函数记录程序运行情况是否正常
                //logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
            }
            else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
                //判断该笔订单是否在商户网站中已经做过处理
                //如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
                //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
                //如果有做过处理，不执行商户的业务程序

                //注意：
                //付款完成后，支付宝系统发送该交易状态通知

                //调试用，写文本函数记录程序运行情况是否正常
                //logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
                //先查询我们网站订单的状态
                $order = $this->orders_model->get_order_tradeno($out_trade_no);
                //只有当状态是未付款时，才修改支付状态
                if($order['pay_status']==0){
                    $id = $order['id'];
                    $data['pay_status'] = 1;
                    $data['pay_trade_no'] = $trade_no;
                    $result = $this->orders_model->update_order($data,$id);
                    //写日志
                    $logdata2['content'] ="修改订单支付状态，处理结果:".$result;
                    $logdata2['ctime'] = time();

                    $this->orders_model->add_logs($logdata);

                    /*if(!$result){
                        echo('修改订单状态失败<br>');
                    }else{
                        echo "<a target='_blank' href='../show_order.php?trade_no={$out_trade_no}'>查看订单</a>";
                    }*/
                }

            }

            //——请根据您的业务逻辑来编写程序（以上代码仅作参考）——

            echo "success";		//请不要修改或删除

            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        }
        else {
            //验证失败
            echo "fail";

            //调试用，写文本函数记录程序运行情况是否正常
            //logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
        }

    }


}